001 /* 002 * Copyright 2005 Stephen J. McConnell. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 013 * implied. 014 * 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019 package net.dpml.transit.info; 020 021 import net.dpml.lang.AbstractDirective; 022 023 /** 024 * The CodeBaseDirective is immutable datastructure used to 025 * describe a codebase. 026 * 027 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a> 028 * @version 1.0.1 029 */ 030 public class TransitDirective extends AbstractDirective 031 { 032 /** 033 * Classic configuration profile. 034 */ 035 public static final TransitDirective CLASSIC_PROFILE = createClassicProfile(); 036 037 private final ProxyDirective m_proxy; 038 private final CacheDirective m_cache; 039 040 /** 041 * Creation of a new codebase descriptor. 042 * @param proxy the proxy configuration 043 * @param cache the cache configuration 044 * @exception NullPointerException if the cache configuration arguments is null 045 */ 046 public TransitDirective( ProxyDirective proxy, CacheDirective cache ) 047 throws NullPointerException 048 { 049 if( null == cache ) 050 { 051 throw new NullPointerException( "cache" ); 052 } 053 054 m_proxy = proxy; 055 m_cache = cache; 056 } 057 058 /** 059 * Return the cache configuration directive. 060 * 061 * @return the cache directive 062 */ 063 public CacheDirective getCacheDirective() 064 { 065 return m_cache; 066 } 067 068 /** 069 * Return the proxy configuration. 070 * 071 * @return the proxy directive (possibly null) 072 */ 073 public ProxyDirective getProxyDirective() 074 { 075 return m_proxy; 076 } 077 078 /** 079 * Test if the supplied object is equal to this object. 080 * @param other the object to evaluate 081 * @return true if this object is equal to the supplied object 082 */ 083 public boolean equals( Object other ) 084 { 085 if( super.equals( other ) && ( other instanceof TransitDirective ) ) 086 { 087 TransitDirective directive = (TransitDirective) other; 088 if( !equals( m_proxy, directive.m_proxy ) ) 089 { 090 return false; 091 } 092 else 093 { 094 return equals( m_cache, directive.m_cache ); 095 } 096 } 097 else 098 { 099 return false; 100 } 101 } 102 103 /** 104 * Compute the instance hashcode value. 105 * @return the hashcode 106 */ 107 public int hashCode() 108 { 109 int hash = super.hashCode(); 110 hash ^= hashValue( m_proxy ); 111 hash ^= hashValue( m_cache ); 112 return hash; 113 } 114 115 private static TransitDirective createClassicProfile() 116 { 117 HostDirective[] hosts = new HostDirective[4]; 118 hosts[0] = 119 new HostDirective( 120 "dpml", 40, "http://repository.dpml.net/classic", null, null, null, 121 true, false, "classic", null, null ); 122 hosts[1] = 123 new HostDirective( 124 "ibiblio", 70, "http://www.ibiblio.org/maven", null, null, null, 125 true, false, "classic", null, null ); 126 hosts[2] = 127 new HostDirective( 128 "m2", 100, "http://www.ibiblio.org/maven2", null, null, null, 129 true, false, "modern", null, null ); 130 hosts[3] = 131 new HostDirective( 132 "apache", 140, "http://www.apache.org/dist/java-repository", null, null, null, 133 true, false, "classic", null, null ); 134 135 CacheDirective cache = 136 new CacheDirective( 137 CacheDirective.CACHE_PATH, 138 CacheDirective.CACHE_LAYOUT, 139 CacheDirective.LOCAL_PATH, 140 CacheDirective.LOCAL_LAYOUT, 141 CacheDirective.EMPTY_LAYOUTS, 142 hosts ); 143 return new TransitDirective( null, cache ); 144 } 145 146 }